package com.leileimann.tour.controller.Userpages;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.leileimann.tour.common.ResultMapUtil;
import com.leileimann.tour.entity.Collect;
import com.leileimann.tour.entity.User;
import com.leileimann.tour.mapper.CollectMapper;
import com.leileimann.tour.mapper.UserMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @author leileiMann
 * @date 2022/3/2 2:23
 * @RestController 包含了很多的注解，其中就包含有@Controller和@ResponseBody
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private CollectMapper collectMapper;
//    @Autowired
//    private CityMapper cityMapper;

//    /**
//     * header中搜索框查询内容查询内容
//     * */
//    @RequestMapping(value = "/searchCity")
//    @ResponseBody
//    public Object searchCity(Model model, @Param("cityname") String cityname){
//        if (cityname == null || cityname == "") {
//            return ResultMapUtil.getHashMapLogin("不能查询名字为空的城市","2");
//        }else{
//            /*查询城市实体*/
//            City city = cityMapper.getCityByCityName(cityname);
//            if (city != null){
//                model.addAttribute("city",city);
//                return ResultMapUtil.getHashMapLogin("查询成功！进入详情","1");
//            }else{
//                return ResultMapUtil.getHashMapLogin("没有该城市！后续将会添加","2");
//            }
//        }
//    }

    /**
     * 测试 获取全部用户
     */
    @GetMapping("/getAllUsers")
    public List<User> getAllUsers() {
        return userMapper.getAllUser();
    }

    /**
     * 判断用户登录是否成功
     */
    @RequestMapping(value = "/toLogin")
    @ResponseBody
    public Object toLogin(HttpSession session,@Param("tel") String tel, @Param("password") String password) {
        /*首先判断输入的用户名和密码是否为空*/
        if (tel == null || password == null) {
            return ResultMapUtil.getHashMapLogin("手机号和密码不能为空", "2");
        } else {
            User user = userMapper.findByTelAndPassword(tel,password);
            if (user != null) {
                if (tel.equals(user.getTel()) && password.equals(user.getPassword())) {
                    /*用户正确登录，将登录的用户对象信息放到session中*/
                    session.setAttribute("user",user);
                    return ResultMapUtil.getHashMapLogin("验证成功-->正在返回主页！", "1");
                } else {
                    return ResultMapUtil.getHashMapLogin("手机号或者密码错误！", "2");
                }
            } else {
                return ResultMapUtil.getHashMapLogin("手机号或者密码错误！", "2");
            }
        }
    }

    /**
     * 用户注册控制器
     * */
    @RequestMapping("/register")
    @ResponseBody
    public Object register(@Param("user") User user){
        //实现判断是否已经有目前注册的用户 用户为空就进行注册操作否则提示已经注册
        User user1 = userMapper.findByTel(user.getTel());
        if (user1 == null){
            //将前端输入的数据传入新的User对象之中
            int i = userMapper.createUser(user);
            if (i==1){
                /*调用的是用户注册的结果集映射*/
                return ResultMapUtil.getHashMapRegisters("注册成功","1");
            }else{
                return ResultMapUtil.getHashMapRegisters("缺失必要的数据，注册失败，请重新注册！","2");
            }
        }else {
            return ResultMapUtil.getHashMapRegisters("该用户已经注册，请重新注册！","2");
        }
}

    /**根据登录进来的用户手机号码进行用户信息修改*/
    @RequestMapping("/editUser")
    @ResponseBody
    public Object editUser(HttpSession session,@Param("tel")String tel,@Param("password")String password,@Param("username")String username,
                           @Param("age")String age,@Param("address")String address,@Param("sex")String sex){
        //将前端传来的修改的用户数据放入方法中，并返回一个修改后的用户
        if (tel != null){
            User userq = userMapper.updateUser(tel, password, username, age, address, sex);
            session.setAttribute("user",userq);  //将修改后用户加入到session中，替代原来的user
            //用户个人数据进行修改之后，原本session中的user因为数据改变而失效，所以需要重新添加一个user，并将新的user注入到session中
            User user = new User(username,address,tel,sex,age,password);
            session.setAttribute("user",user);
            return ResultMapUtil.getHashMapLogin("修改成功！","1");
        }
        return ResultMapUtil.getHashMapLogin("修改失败!,传入的user对象为空","2");  //返回的提示直接借用登录的使用，懒得写
    }

    /**通过手机号码查找用户  玩玩  测试功能*/
    @RequestMapping("/findByTel")
    @ResponseBody
    public User findByTel(@Param("tel")String tel){
        return userMapper.findByTel(tel);
    }

//    收藏   加上手机号的原因是因为每一位用户的收藏都不同

    /**通过收藏名称查询收藏内容*/
    @RequestMapping("/getCollectByCollectName")
    @ResponseBody
    public Collect getCollectByCollectName(@Param("collectname")String collectname,@Param("tel")String tel){
        return (Collect) collectMapper.getObjByCollectName(collectname,tel);
    }

    /**添加收藏*/
    @RequestMapping("/createCollect")
    @ResponseBody
    public boolean createCollect(@Param("collectname")String collectname,@Param("tel")String tel,@Param("locationX")String locationX,@Param("locationY")String locationY){
        //将收藏时间加入到里面放着
        // 下句代码的意思就是使用ObjectMapper类的setDateFormat方法设置日期格式
        // 设置的格式通过SimpleDateFormat类的构造方法进行设置
        ObjectMapper objMapper = new ObjectMapper();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        objMapper.setDateFormat(dateFormat);
        try {
            String collectTime= objMapper.writeValueAsString(new Date());
            String scr = collectMapper.createCollect(collectname,tel,collectTime,locationX,locationY);
//            System.out.println("scr的值为:  "+scr);
            /*通过collectname检索出来的字符串判断如果正确执行*/
            if (scr.equals(collectname)){
                return true;
            }
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**取消收藏 默认返回为true*/
    @RequestMapping("/moveCollect")
    @ResponseBody
    public boolean moveCollect(@Param("collectname")String collectname,@Param("tel")String tel){
        collectMapper.moveCollect(collectname,tel);
        return true;
    }

}
